update (node, key, attrName) {
  // 增加 eventName attr 两个变量 用于处理 v-on:xxx
  let eventName
  let attr = attrName
  if (attrName.includes(':')) {
      let tmp = attrName.split(':')
      attr = tmp[0]
      eventName = tmp[1]
  }
  let updateFn = this[`${attr}Updater`]
  updateFn && updateFn.call(this, node, this.vm[key], key, eventName)
}

// v-on 实现
onUpdater (node, value, key, eventName) {
  // 将对应的 html 放入对应的 DOM 元素中 或者 window.addEventListener
  node[`on${eventName}`] = value
  // 监听对应的属性
  new Watcher(this.vm, key, newValue => {
      node[`on${eventName}`] = newValue
  })
}

// v-html 实现
htmlUpdater (node, value, key) {
  // 将对应的 html 放入对应的 DOM 元素中
  node.innerHTML = value
  // 监听对应的属性
  new Watcher(this.vm, key, newValue => {
      node.innerHTML = newValue
  })
}